1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : courses/classes/class.Settings.inc.php
5 : - Modulgruppe: Veranstaltung
6 : - Beschreibung: Veranstaltungseinstellungen.
7 : - Version: 0.2.2, 03/01/07
8 : - Autor(en): Timo Fuchs <timo.fuchs@mni.fh-giessen.de>
9 : Rolf Viehmann <rolfhub@web.de>
10 : Markus Keim <markus.keim@mni.fh-giessen.de>
11 : +---------------------------------------------------------------------------+
12 : This program is free software; you can redistribute it and/or
13 : modify it under the terms of the GNU General Public License
14 : as published by the Free Software Foundation; either version 2
15 : of the License, or any later version.
16 : +---------------------------------------------------------------------------+
17 : This program is distributed in the hope that it will be useful,
18 : but WITHOUT ANY WARRANTY; without even the implied warranty of
19 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 : GNU General Public License for more details.
21 : You should have received a copy of the GNU General Public License
22 : along with this program; if not, write to the Free Software
23 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 : +--------------------------------------------------------------------------*/
25 : /**
26 : * In dieser Datei wird die Klasse Settings implementiert.
27 : * @package eStudy.Courses
28 : * @version 0.2.2, 03/01/07
29 : * @author Timo Fuchs <timo.fuchs@mni.fh-giessen.de>
30 : * @author Rolf Viehmann <rolfhub@web.de>
31 : * @author Markus Keim <markus.keim@mni.fh-giessen.de>
32 : */
33 : /** Hilfefunktionen*/
34 1 : require_once ("class.Course.inc.php");
35 : /** Dialog fuer Einstellungen*/
36 1 : require_once ("class.SettingsDialog.inc.php");
37 : /** Passwort-Klasse (diverse Prüfungen etc.)*/
38 1 : require_once ("class.passwords.inc.php");
39 : /* Funktionalitäten für kursspezifischen Style */
40 1 : require_once ("class.style.inc.php");
41 : /**
42 : * Veranstaltungseinstellungen.
43 : *
44 : * @package eStudy.Courses
45 : * @author Timo Fuchs <timo.fuchs@mni.fh-giessen.de>
46 : * @version 0.1, 15/02/04
47 : */
48 1 : class Settings {
49 : /**
50 : * ID der Veranstaltung.
51 : *
52 : * @access private
53 : * @var integer
54 : */
55 : var $id;
56 : /**
57 : * Name der Veranstaltung.
58 : *
59 : * @access private
60 : * @var string
61 : */
62 : var $name;
63 : /**
64 : * Kurzname der Veranstaltung.
65 : *
66 : * @access private
67 : * @var string
68 : */
69 : var $shortname;
70 : // Modulkuerzel
71 : var $modulShortCut;
72 : /**
73 : * Semester, in dem die Veranstaltung stattfindet.
74 : * (In der Form 03WS)
75 : *
76 : * @access private
77 : * @var string
78 : */
79 : var $semester;
80 : /**
81 : * Stichwörter der Veranstaltung.
82 : *
83 : * @access private
84 : * @var string
85 : */
86 : var $keywords;
87 : /**
88 : * Starttag des Anmeldeverfahrens.
89 : *
90 : * @access private
91 : * @var string
92 : */
93 : var $opendate;
94 : /**
95 : * Endtag des Anmeldeverfahrens.
96 : *
97 : * @access private
98 : * @var string
99 : */
100 : var $closedate;
101 : /**
102 : * Passwort zur Anmeldung.
103 : *
104 : * @access private
105 : * @var string
106 : */
107 : var $regpass;
108 : /**
109 : * Maximale Anzahl der Studenten.
110 : *
111 : * @access private
112 : * @var integer
113 : */
114 : var $maxstudents;
115 : /**
116 : * Soll Warteliste bei Anmeldeverfahren benutzt werden?
117 : *
118 : * @access private
119 : * @var bool
120 : */
121 : var $usewaitinglist;
122 : /**
123 : * Ist der Kurs geschlossen?
124 : *
125 : * @access private
126 : * @var bool
127 : */
128 : var $closed;
129 : /**
130 : * Allgemein zugaengliche Information zur Veranstaltung.
131 : *
132 : * @access private
133 : * @var string
134 : */
135 : var $info;
136 : /**
137 : * URL für eine FAQ, die in der Fussleiste eingeblendet wird.
138 : *
139 : * @access private
140 : * @var string
141 : */
142 : var $faq_url;
143 : /**
144 : * Kursspezifischer Style.
145 : *
146 : * @access private
147 : * @var string
148 : */
149 : var $style;
150 : /**
151 : * Typ des Kurses: normaler Kurs oder eCommunity
152 : *
153 : * @access private
154 : * @var string
155 : */
156 : var $type;
157 : /**
158 : * $modulbeschreibung_ID
159 : * Hier wird die ID der Modulbeschreibung (, welche aus XML-Dateien importiert wurden,) gespeichert.
160 : *
161 : * @access private
162 : * @var integer
163 : */
164 : var $modulbeschreibung_ID;
165 : /**
166 : * Temporaere Fehler des Objekts.
167 : * Hier werden alle Fehler gespeichert, die bei Manipulationen
168 : * auftreten koennen.
169 : *
170 : * @access private
171 : * @var string[]
172 : */
173 : var $errors;
174 : /**
175 : * Konstruktor.
176 : *
177 : * @access public
178 : * @param integer $courseid - ID der Veranstaltung
179 : * @return bool - true, wenn Objekt fehlerfrei erzeugt
180 : * false, wenn Fehler auftraten
181 : */
182 : function Settings($courseid) {
183 0 : $this->errors = array();
184 0 : $this->id = (int)$courseid;
185 0 : $dbset = $this->getDBSettings();
186 : // Fuer's Foyer gibt es keinen Eintrag, ruhiger Ausstieg
187 0 : if ($this->id === 0) return false;
188 : // Unsinnige Kurs-ID erhalten, Abbruch!
189 0 : if (!$dbset) throw new Exception("Dieser Kurs existiert nicht!");
190 0 : $this->name = $dbset->Name;
191 0 : $this->shortname = $dbset->ShortName;
192 0 : $this->modulShortCut = $dbset->modulShortCut;
193 0 : $this->semester = $dbset->Semester;
194 0 : $this->opendate = $dbset->OpenDate;
195 0 : $this->closedate = $dbset->CloseDate;
196 0 : $this->regpass = $dbset->RegPass;
197 0 : $this->maxstudents = $dbset->MaxStudents;
198 0 : $this->usewaitinglist = $dbset->UseWaitinglist;
199 0 : $this->info = $dbset->Info;
200 0 : $this->closed = $dbset->closed;
201 0 : $this->keywords = $dbset->Keywords;
202 0 : $this->faq_url = $dbset->faq_url;
203 0 : $this->type = $dbset->Type;
204 0 : $this->style = $dbset->style;
205 0 : $this->modulbeschreibung_ID = $dbset->modulbeschreibung_ID;
206 0 : return true;
207 : }
208 : /**
209 : * Fuegt Fehlerstring hinzu.
210 : *
211 : * @access private
212 : * @param string $errorString - Fehlerstring
213 : * @return void
214 : */
215 : function addError($errorString) {
216 0 : $this->errors[] = $errorString;
217 0 : }
218 : /**
219 : * Loescht alle Fehlerstrings im Objekt.
220 : *
221 : * @access public
222 : * @return void
223 : */
224 : function resetErrors() {
225 0 : unset($this->errors);
226 0 : $this->errors = array();
227 0 : }
228 : /**
229 : * Gibt Daten aus Datenbank.courses zurueck.
230 : *
231 : * @access private
232 : * @return string[] - 'Name' - Name der Veranstaltung
233 : * 'ShortName' - Kurzname der Veranstaltung
234 : * 'Semester' - Semester i.d. Veranstaltung stattfindet ("03WS")
235 : * 'OpenDate' - Starttag des Anmeldeverfahrens
236 : * 'CloseDate' - Endtag des Anmeldeverfahrens
237 : * 'RegPass' - Passwort zur Anmeldung
238 : * 'MaxStudents' - Maximale Teilnehmerzahl
239 : * 'UseWaitinglist' - soll Warteliste benutzt werden
240 : * 'Info' - allgemein zugaengliche Information
241 : */
242 : function getDBSettings() {
243 0 : global $db;
244 0 : $courseDataQ = "SELECT Name, ShortName, modulShortCut, Semester, OpenDate, CloseDate, RegPass, MaxStudents, UseWaitinglist, Info, closed, Keywords, style, faq_url, Type, modulbeschreibung_ID ";
245 0 : $courseDataQ.= "FROM courses WHERE ID=".$this->getID();
246 0 : $courseData = $db->get_row($courseDataQ);
247 0 : if (!$courseData) return false;
248 0 : return $courseData;
249 : }
250 : /**
251 : * Setzt den Veranstaltungsnamen.
252 : *
253 : * @access public
254 : * @param string $name - Name der Veranstaltung
255 : * @return bool - true, wenn Name gesetzt
256 : * false, falls Name nicht gestzt werden konnte
257 : */
258 : function setName($name) {
259 0 : global $db, $EZSQL_ERROR;
260 0 : $valError = $this->validateName($name);
261 0 : if ($valError != "") {
262 0 : $this->addError("<strong>Name konnte nicht gespeichert werden</strong> (".$valError.")");
263 0 : return false;
264 : }
265 0 : $name = $this->formatName($name);
266 0 : if ($this->name != $name) {
267 0 : $updateQ = "UPDATE courses SET Name='".$name."' ";
268 0 : $updateQ.= "WHERE ID=".$this->id;
269 0 : $errorCount = count($EZSQL_ERROR);
270 0 : $db->query($updateQ);
271 0 : if (count($EZSQL_ERROR) > $errorCount) {
272 0 : $this->addError("<strong>Name konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
273 0 : return false;
274 : }
275 0 : }
276 0 : $this->name = $name;
277 0 : return true;
278 : }
279 : /**
280 : * Setzt den Veranstaltungskurznamen.
281 : *
282 : * @access public
283 : * @param string $shortname - Kurzame der Veranstaltung
284 : * @return bool - true, wenn Kurzname gesetzt
285 : * false, falls Kurzname nicht gestzt werden konnte
286 : */
287 : function setShortname($shortname) {
288 0 : global $db, $EZSQL_ERROR;
289 0 : $valError = $this->validateShortname($shortname);
290 0 : if ($valError != "") {
291 0 : $this->addError("<strong>Kurzname konnte nicht gespeichert werden</strong> (".$valError.")");
292 0 : return false;
293 : }
294 0 : $shortname = $this->formatName($shortname);
295 0 : if ($this->shortname != $shortname) {
296 0 : $updateQ = "UPDATE courses SET shortName='".$shortname."' ";
297 0 : $updateQ.= "WHERE ID=".$this->id;
298 0 : $errorCount = count($EZSQL_ERROR);
299 0 : $db->query($updateQ);
300 0 : if (count($EZSQL_ERROR) > $errorCount) {
301 0 : $this->addError("<strong>Kurzname konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
302 0 : return false;
303 : }
304 0 : }
305 0 : $this->shortname = $shortname;
306 0 : return true;
307 : }
308 :
309 :
310 : /**
311 : * Setzt das Modulkürzel.
312 : *
313 : * @access public
314 : * @param string $modulShortCut - Kurzame der Veranstaltung
315 : * @return bool - true, wenn Modulkürzel gesetzt
316 : * false, falls Modulkürzel nicht gestzt werden konnte
317 : */
318 : function setModulShortCut($modulShortCut) {
319 0 : global $db, $EZSQL_ERROR;
320 0 : $valError = $this->validateShortname($modulShortCut);
321 0 : if ($valError != "") {
322 0 : $this->addError("<strong>Modulkürzel konnte nicht gespeichert werden</strong> (".$valError.")");
323 0 : return false;
324 : }
325 0 : $modulShortCut = $this->formatName($modulShortCut);
326 0 : if ($this->modulShortCut != $modulShortCut) {
327 0 : $updateQ = "UPDATE courses SET modulShortCut='".$modulShortCut."' ";
328 0 : $updateQ.= "WHERE ID=".$this->id;
329 0 : $errorCount = count($EZSQL_ERROR);
330 0 : $db->query($updateQ);
331 0 : if (count($EZSQL_ERROR) > $errorCount) {
332 0 : $this->addError("<strong>Modulkürzel konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
333 0 : return false;
334 : }
335 0 : }
336 0 : $this->modulShortCut = $modulShortCut;
337 0 : return true;
338 : }
339 : /**
340 : * Setzt den kursspezifischen Style.
341 : *
342 : * @access public
343 : * @param string $style - Name des Styles
344 : * @return bool - true, wenn Style gesetzt
345 : * false, falls Style nicht gesetzt werden konnte
346 : */
347 : function setStyle($style) {
348 0 : global $db, $EZSQL_ERROR;
349 0 : $valError = $this->validateStyle($style);
350 0 : if ($valError != "") {
351 0 : $this->addError("<strong>Kursspezifischer Style konnte nicht gespeichert werden</strong> (".$valError.")");
352 0 : return false;
353 : }
354 0 : if ($this->style != $style) {
355 0 : $updateQ = "UPDATE courses SET style='".$style."' ";
356 0 : $updateQ.= "WHERE ID=".$this->id;
357 0 : $errorCount = count($EZSQL_ERROR);
358 0 : $db->query($updateQ);
359 0 : if (count($EZSQL_ERROR) > $errorCount) {
360 0 : $this->addError("<strong>Kursspezifischer Style konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
361 0 : return false;
362 : }
363 0 : }
364 0 : $this->style = $style;
365 0 : return true;
366 : }
367 : /**
368 : * Setzt die Stichwörter für die Veranstaltung.
369 : *
370 : * @access public
371 : * @param string $keywords - Stichwörter der Veranstaltung
372 : * @return bool - true, wenn Stichwörter gesetzt
373 : * false, falls Stichwörter nicht gestzt werden konnten
374 : */
375 : function setKeywords($keywords) {
376 0 : global $db, $EZSQL_ERROR;
377 0 : $valError = $this->validateKeywords($keywords);
378 0 : if ($valError != "") {
379 0 : $this->addError("<strong>Stichwörter konnten nicht gespeichert werden</strong> (".$valError.")");
380 0 : return false;
381 : }
382 0 : $keywords = $this->formatName($keywords);
383 0 : if ($this->keywords != $keywords) {
384 0 : $updateQ = "UPDATE courses SET keywords='".$keywords."' ";
385 0 : $updateQ.= "WHERE ID=".$this->id;
386 0 : $errorCount = count($EZSQL_ERROR);
387 0 : $db->query($updateQ);
388 0 : if (count($EZSQL_ERROR) > $errorCount) {
389 0 : $this->addError("<strong>Kurzname konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
390 0 : return false;
391 : }
392 0 : }
393 0 : $this->keywords = $keywords;
394 0 : return true;
395 : }
396 : function setFAQURL($faq) {
397 0 : global $db, $EZSQL_ERROR;
398 0 : $valError = $this->validateKeywords($faq);
399 0 : if ($valError != "") {
400 0 : $this->addError("<strong>FAQ-URL zu lang.</strong>");
401 0 : return false;
402 : }
403 : //$faq = trim($faq);
404 0 : $faq = Data::toMySQL($faq);
405 0 : if ($this->faq_url != $faq) {
406 0 : $updateQ = "UPDATE courses SET faq_url='".$faq."' ";
407 0 : $updateQ.= "WHERE ID=".$this->id;
408 0 : $errorCount = count($EZSQL_ERROR);
409 0 : $db->query($updateQ);
410 0 : if (count($EZSQL_ERROR) > $errorCount) {
411 0 : $this->addError("<strong>FAQ konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
412 0 : return false;
413 : }
414 0 : }
415 0 : $this->faq_url = $faq;
416 0 : return true;
417 : }
418 : /**
419 : * Setzt das Semester, in dem die Veranstaltung stattfindet.
420 : *
421 : * @access public
422 : * @param string $semester - Semesterstring in der Form "WS 03/04" oder "SS 04"
423 : * @return bool - true, wenn Semester gesetzt
424 : * false, falls Semester nicht gestzt werden konnte
425 : */
426 : function setSemester($semester) {
427 0 : global $db, $EZSQL_ERROR;
428 0 : $updateQ = "UPDATE courses SET Semester='";
429 0 : $updateQ.= Course::semesterStringToDB($semester);
430 0 : $updateQ.= "' WHERE ID=".$this->getID();
431 0 : $errorCount = count($EZSQL_ERROR);
432 0 : $db->query($updateQ);
433 0 : if (count($EZSQL_ERROR) > $errorCount) {
434 0 : $this->addError("<strong>Semester konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
435 0 : return false;
436 : }
437 0 : $this->semester = $semester;
438 0 : return true;
439 : }
440 : /**
441 : * Setzt das Startdatum fuer das Anmeldeverfahren.
442 : *
443 : * @access public
444 : * @param string $opendate - Startdatum
445 : * @return bool - true, wenn Startdatum gesetzt
446 : * false, falls Startdatum nicht gestzt werden konnte
447 : */
448 : function setOpendate($opendate) {
449 0 : global $db, $EZSQL_ERROR;
450 0 : $updateQ = "UPDATE courses SET OpenDate='".$opendate;
451 0 : $updateQ.= "' WHERE ID=".$this->getID();
452 0 : $errorCount = count($EZSQL_ERROR);
453 0 : $db->query($updateQ);
454 0 : if (count($EZSQL_ERROR) > $errorCount) {
455 0 : $this->addError("<strong>Startzeitpunkt der Anmeldung konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
456 0 : return false;
457 : }
458 0 : $this->opendate = $opendate;
459 0 : return true;
460 : }
461 : /**
462 : * Setzt das Enddatum fuer das Anmeldeverfahren.
463 : *
464 : * @access public
465 : * @param string $closedate - Enddatum
466 : * @return bool - true, wenn Enddatum gesetzt
467 : * false, falls Enddatum nicht gestzt werden konnte
468 : */
469 : function setClosedate($closedate) {
470 0 : global $db, $EZSQL_ERROR;
471 0 : $updateQ = "UPDATE courses SET CloseDate='".$closedate;
472 0 : $updateQ.= "' WHERE ID=".$this->getID();
473 0 : $errorCount = count($EZSQL_ERROR);
474 0 : $db->query($updateQ);
475 0 : if (count($EZSQL_ERROR) > $errorCount) {
476 0 : $this->addError("<strong>Endzeitpunkt der Anmeldung konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
477 0 : return false;
478 : }
479 0 : $this->closedate = $closedate;
480 0 : return true;
481 : }
482 : /**
483 : * Setzt das Passwort fuer das Anmeldeverfahren.
484 : *
485 : * @access public
486 : * @param string $regpass - Passwort
487 : * @return bool - true, wenn Passwort gesetzt
488 : * false, falls Passwort nicht gestzt werden konnte
489 : */
490 : function setRegpass($regpass) {
491 0 : global $db, $EZSQL_ERROR;
492 : /* Leeres Anmeldepasswort soll gestattet sein */
493 0 : if ($regpass != '') {
494 0 : $valError = '';
495 0 : $errorArray = $this->validateRegistrationPassword($regpass);
496 0 : if ($errorArray) {
497 : /* error array set, PW invalid */
498 0 : $valError = Passwords::errorConstToString($errorArray);
499 0 : $passwordSuggestion = Passwords::generatePasswordFromUserInput($regpass, $errorArray);
500 0 : $pwHint = Passwords::getUserHintAsHTML();
501 0 : $this->addError("<strong>Passwort für die Anmeldung konnte nicht gespeichert werden</strong><br />".$valError.$pwHint."<br/>So könnte ein gültiges Passwort anhand Ihrer Eingabe aussehen: ".$passwordSuggestion);
502 0 : return false;
503 : }
504 0 : }
505 0 : if ($this->regpass != $regpass) {
506 0 : $updateQ = "UPDATE courses SET RegPass='".Data::toMySQL($regpass) ."' ";
507 0 : $updateQ.= "WHERE ID=".$this->id;
508 0 : $errorCount = count($EZSQL_ERROR);
509 0 : $db->query($updateQ);
510 0 : if (count($EZSQL_ERROR) > $errorCount) {
511 0 : $this->addError("<strong>Passwort für die Anmeldung konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
512 0 : return false;
513 : }
514 0 : }
515 0 : $this->regpass = $regpass;
516 0 : return true;
517 : }
518 : /**
519 : * Setzt die maximale Anzahl der an der Veranstaltung teilnehmenden Studenten.
520 : *
521 : * @access public
522 : * @param integer $count - Anzahl
523 : * @return bool - true, wenn Anzahl gesetzt
524 : * false, falls Anzahl nicht gestzt werden konnte
525 : */
526 : function setMaxStudents($count) {
527 0 : global $db, $EZSQL_ERROR;
528 0 : $valError = $this->validateMaxStudents($count);
529 0 : if ($valError != "") {
530 0 : $this->addError("<strong>Maximale Teilnehmerzahl konnte nicht gespeichert werden</strong> (".$valError.")");
531 0 : return false;
532 : }
533 0 : if ($this->getMaxStudents() != $count) {
534 0 : $updateQ = "UPDATE courses SET MaxStudents='".$count."' ";
535 0 : $updateQ.= "WHERE ID=".$this->id;
536 0 : $errorCount = count($EZSQL_ERROR);
537 0 : $db->query($updateQ);
538 0 : if (count($EZSQL_ERROR) > $errorCount) {
539 0 : $this->addError("<strong>Maximale Teilnehmerzahl konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
540 0 : return false;
541 : }
542 0 : }
543 0 : $this->maxstudents = $count;
544 0 : return true;
545 : }
546 : /**
547 : * Legt fest, ob beim Anmeldeverfahren eine Warteliste benutzt werden soll.
548 : *
549 : * @access public
550 : * @param integer $use - 1 fuer ja, 0 fuer nein
551 : * @return bool - true, wenn gesetzt
552 : * false, falls nicht gestzt werden konnte
553 : */
554 : function setUseWaitinglist($use) {
555 0 : global $db, $EZSQL_ERROR;
556 : // auf gueltige Werte pruefen.
557 0 : if (($use != 1) && ($use != 0)) {
558 0 : return false;
559 : }
560 : // pruefen, ob noch Benutzer in Warteliste sind.
561 0 : if (($use == 0) && (count(Course::getParticipants($this->getID(), "wait")) != 0)) {
562 0 : $this->addError("<strong>Warteliste konnte nicht deaktiviert werden</strong><br />(Es sind noch Benutzer in der Warteliste vorhanden<br />Bereinigen Sie die Warteliste vor dem Deaktivieren)");
563 0 : return false;
564 : }
565 0 : if ($this->getUseWaitinglist() != $use) {
566 0 : $updateQ = "UPDATE courses SET UseWaitinglist=".$use." ";
567 0 : $updateQ.= "WHERE ID=".$this->getID();
568 0 : $errorCount = count($EZSQL_ERROR);
569 0 : $db->query($updateQ);
570 0 : if (count($EZSQL_ERROR) > $errorCount) {
571 0 : $this->addError("<strong>Wartelisteneinstellung konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
572 0 : return false;
573 : }
574 0 : }
575 0 : $this->usewaitinglist = $use;
576 0 : return true;
577 : }
578 : /**
579 : * Setzt die allgemein zugaengliche Information fuer die Veranstaltung.
580 : *
581 : * @access public
582 : * @param string $info - Infostring
583 : * @return bool - true, wenn Info gesetzt
584 : * false, falls Info nicht gestzt werden konnte
585 : */
586 : function setInfo($info) {
587 0 : global $db, $EZSQL_ERROR;
588 : /*$valError = $this->validateInfo($info);
589 : if($valError != "") {
590 : $this->addError("<strong>Veranstaltungs-Information konnte nicht gespeichert werden</strong> (".$valError.")");
591 : return false;
592 : }
593 : $info = $this->formatInfo($info);*/
594 0 : if ($this->info != $info) {
595 0 : $updateQ = "UPDATE courses SET Info='".$info."' ";
596 0 : $updateQ.= "WHERE ID=".$this->id;
597 0 : $errorCount = count($EZSQL_ERROR);
598 0 : $db->query($updateQ);
599 0 : if (count($EZSQL_ERROR) > $errorCount) {
600 0 : $this->addError("<strong>Veranstaltungs-Information konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
601 0 : return false;
602 : }
603 0 : }
604 0 : $this->info = $info;
605 0 : return true;
606 : }
607 :
608 : function setModulbeschreibung_ID($modulID){
609 0 : global $db, $EZSQL_ERROR;
610 :
611 0 : $updateQ = "UPDATE courses SET modulbeschreibung_ID='".$modulID."'";
612 0 : $updateQ.= "WHERE ID=".$this->id;
613 0 : $errorCount = count($EZSQL_ERROR);
614 0 : $db->query($updateQ);
615 0 : if (count($EZSQL_ERROR) > $errorCount) {
616 0 : $this->addError("<strong>Modulbeschreibung_ID konnte nicht gespeichert werden</strong> (Datenbank-Fehler)");
617 0 : return false;
618 : }
619 :
620 0 : $this->modulbeschreibung_ID = $modulID;
621 0 : return true;
622 :
623 : }
624 :
625 :
626 : /**
627 : * Gibt die ID der Veranstaltung zurueck.
628 : *
629 : * @access public
630 : * @return integer - ID der Veranstaltung
631 : */
632 : function getID() {
633 0 : return (int)$this->id;
634 : }
635 : /**
636 : * Gibt den Namen der Veranstaltung zurueck.
637 : *
638 : * @access public
639 : * @return string - Name der Veranstaltung
640 : */
641 : function getName() {
642 0 : return $this->name;
643 : }
644 :
645 :
646 : /**
647 : * Gibt den Kurznamen der Veranstaltung zurueck.
648 : *
649 : * @access public
650 : * @return string - Kurzname der Veranstaltung
651 : */
652 : function getShortname() {
653 0 : return $this->shortname;
654 : }
655 :
656 : /**
657 : * Gibt das Modulkürzel der Veranstaltung zurueck.
658 : *
659 : * @access public
660 : * @return string - Modulkürzel der Veranstaltung
661 : */
662 : function getModulShortCut(){
663 0 : return $this->modulShortCut;
664 : }
665 :
666 : /**
667 : * Gibt die Stichwörter der Veranstaltung zurück.
668 : *
669 : * @access public
670 : * @return string - Stichwörter der Veranstaltung
671 : */
672 : function getKeywords() {
673 0 : return $this->keywords;
674 : }
675 : /**
676 : * Gibt das Semester der Veranstaltung zurueck.
677 : *
678 : * @access public
679 : * @return string - Semester, in dem die Veranstaltung stattfindet
680 : * ( In der Form "04SS" bzw. "03WS" )
681 : */
682 : function getSemester() {
683 0 : return $this->semester;
684 : }
685 : /**
686 : * Gibt das Startdatum fuer das Anmeldeverfahren zurueck.
687 : *
688 : * @access public
689 : * @return string - Startdatum
690 : */
691 : function getOpendate() {
692 0 : return $this->opendate;
693 : }
694 : /**
695 : * Gibt das Enddatum fuer das Anmeldeverfahren zurueck.
696 : *
697 : * @access public
698 : * @return string - Enddatum
699 : */
700 : function getClosedate() {
701 0 : return $this->closedate;
702 : }
703 : /**
704 : * Gibt das Passwort fuer das Anmeldeverfahren zurueck.
705 : *
706 : * @access public
707 : * @return string - Passwort
708 : */
709 : function getRegpass() {
710 0 : return $this->regpass;
711 : }
712 : /**
713 : * Gibt zurueck, ob eine Warteliste beim Anmeldeverfahren benutzt wird.
714 : *
715 : * @access public
716 : * @return integer - 1, falls Warteliste benutzt wird
717 : * 0, falls nicht
718 : */
719 : function getUseWaitinglist() {
720 0 : return (int)$this->usewaitinglist;
721 : }
722 : /**
723 : * Gibt die Anzahl der maximal teilnehmenden Studenten zurueck.
724 : *
725 : * @access public
726 : * @return integer - maximale Anzahl der Studenten
727 : */
728 : function getMaxStudents() {
729 0 : return (int)$this->maxstudents;
730 : }
731 : /**
732 : * Gibt die allgemein zugaengliche Information zurueck.
733 : *
734 : * @access public
735 : * @return string - Infostring
736 : */
737 : function getInfo() {
738 0 : return $this->info;
739 : }
740 : /**
741 : * Gibt zurueck, ob der Kurs geschlossen ist.
742 : *
743 : * @access public
744 : * @return integer - 1, falls geschlossen
745 : * 0, falls nicht
746 : */
747 : function getClosed() {
748 0 : return (int)$this->closed;
749 : }
750 : /**
751 : * Gibt den Namen des kursspezifischen Style zurück.
752 : *
753 : * @access public
754 : * @return string Name des kursspezifischen Style
755 : */
756 : function getStyle() {
757 0 : return $this->style;
758 : }
759 : /** Gibt die faq-url zurück
760 : *
761 : * @access public
762 : * @return string - FAQ-URL
763 : */
764 : function getFAQ() {
765 0 : return $this->faq_url;
766 : }
767 :
768 : /** Gibt die den Type des Kurses zurück: normaler Kurs ('course') oder eComuniity ('ecom')
769 : *
770 : * @access public
771 : * @return string - Type
772 : */
773 : function getCourseType() {
774 0 : return $this->type;
775 : }
776 :
777 : function getModulbeschreibung_ID(){
778 0 : return $this->modulbeschreibung_ID;
779 : }
780 : /**
781 : * Prueft, ob Anmeldeverfahren geoeffnet.
782 : *
783 : * @access public
784 : * @return bool - true, falls Anmeldung moeglich
785 : * false, falls Anmeldeverfahren vorbei oder noch nicht begonnen
786 : */
787 : function registrationIsActive() {
788 0 : $now = time();
789 :
790 0 : $isRegistrationOver = $now > strtotime($this->getClosedate() ." 23:59:59");
791 0 : return $this->hasRegistrationStarted($now) && ! $isRegistrationOver;
792 : }
793 :
794 : /**
795 : * @param $now Zeitstempel in Sekunden
796 : * @return bool
797 : */
798 : public function hasRegistrationStarted($now) {
799 0 : return $now >= strtotime($this->getOpendate());
800 : }
801 : /**
802 : * Ueberprueft einen Veranstaltungsnamen auf gueltige Zeichen.
803 : * Gueltige Zeichen sind alle alphabetischen Gross-und Kleinbuchstaben
804 : * und alle Zahlen, sowie die folgenden Sonderzeichen :
805 : * ' ', '/', 'Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü', '-', '+', '#', '(', ')'
806 : *
807 : * @static
808 : * @access public
809 : *
810 : * @param string $coursename - Veranstaltungsname, der geprueft werden soll.
811 : *
812 : * @return string "" - falls Name gueltig.
813 : * $errorMessage - falls ungueltige Zeichen in Name enthalten.
814 : */
815 : function validateName($name) {
816 0 : $nameLength = strlen($name); // Anzahl der Zeichen von $coursename.
817 0 : $validChars = array(); // Zeichen, die ein Veranstaltungsname enthalten darf.
818 : // Pruefen, ob $coursename leerer String.
819 0 : if ($nameLength == 0) {
820 0 : return "kein Name übergeben";
821 : }
822 : // Auf Maximal-Laenge ueberpruefen.
823 0 : if ($nameLength > 120) {
824 0 : return "Name ist zu lang";
825 : }
826 : // alphabetische Grossbuchstaben setzen. (A..Z)
827 0 : for ($i = 65 ; $i <= 90 ; $i++) {
828 0 : $validChars[] = chr($i);
829 0 : }
830 : // alphabetische Kleinbuchstaben setzen. (a..z)
831 0 : for ($i = 97 ; $i <= 122 ; $i++) {
832 0 : $validChars[] = chr($i);
833 0 : }
834 : // Zahlen setzen. (0..9)
835 0 : for ($i = 48 ; $i <= 57 ; $i++) {
836 0 : $validChars[] = chr($i);
837 0 : }
838 : // Auswahl an Sonderzeichen erlauben...
839 0 : $validChars[] = ' ';
840 0 : $validChars[] = '/';
841 0 : $validChars[] = 'ß';
842 0 : $validChars[] = 'Ä';
843 0 : $validChars[] = 'Ö';
844 0 : $validChars[] = 'Ü';
845 0 : $validChars[] = 'ä';
846 0 : $validChars[] = 'ö';
847 0 : $validChars[] = 'ü';
848 0 : $validChars[] = '-';
849 0 : $validChars[] = '+';
850 0 : $validChars[] = '#';
851 0 : $validChars[] = '(';
852 0 : $validChars[] = ')';
853 0 : reset($validChars);
854 : // Jedes Zeichen in $coursename auf Vorhandensein in $validChars pruefen.
855 0 : for ($i = 0 ; $i < $nameLength ; $i++) {
856 0 : if (!in_array(substr($name, $i, 1), $validChars)) {
857 0 : return "Sonderzeichen verwendet";
858 : }
859 0 : }
860 : // Veranstaltungsname O.K.
861 0 : return "";
862 : }
863 : /**
864 : * Ueberprueft einen Kurznamen auf gueltige Zeichen.
865 : * Gueltige Zeichen sind alle alphabetischen Gross-und Kleinbuchstaben
866 : * und alle Zahlen, sowie die folgenden Sonderzeichen :
867 : * ' ', '/', 'Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü', '-', '+', '#', '(', ')'
868 : *
869 : * @static
870 : * @access public
871 : *
872 : * @param string $shortname - Kurzname, der geprueft werden soll.
873 : *
874 : * @return string "" - falls Name gueltig.
875 : * $errorMessage - falls ungueltige Zeichen in Name enthalten.
876 : */
877 : function validateShortname($shortname) {
878 0 : $nameLength = strlen($shortname); // Anzahl der Zeichen von $coursename.
879 0 : $validChars = array(); // Zeichen, die ein Veranstaltungsname enthalten darf.
880 : // Pruefen, ob $shortname leerer String.
881 0 : if ($nameLength == 0) {
882 0 : return "kein Name übergeben";
883 : }
884 : // Auf Maximal-Laenge ueberpruefen.
885 0 : if ($nameLength > 10) {
886 0 : return "Name ist zu lang";
887 : }
888 : // alphabetische Grossbuchstaben setzen. (A..Z)
889 0 : for ($i = 65 ; $i <= 90 ; $i++) {
890 0 : $validChars[] = chr($i);
891 0 : }
892 : // alphabetische Kleinbuchstaben setzen. (a..z)
893 0 : for ($i = 97 ; $i <= 122 ; $i++) {
894 0 : $validChars[] = chr($i);
895 0 : }
896 : // Zahlen setzen. (0..9)
897 0 : for ($i = 48 ; $i <= 57 ; $i++) {
898 0 : $validChars[] = chr($i);
899 0 : }
900 : // Auswahl an Sonderzeichen erlauben...
901 0 : $validChars[] = ' ';
902 0 : $validChars[] = '/';
903 0 : $validChars[] = 'ß';
904 0 : $validChars[] = 'Ä';
905 0 : $validChars[] = 'Ö';
906 0 : $validChars[] = 'Ü';
907 0 : $validChars[] = 'ä';
908 0 : $validChars[] = 'ö';
909 0 : $validChars[] = 'ü';
910 0 : $validChars[] = '-';
911 0 : $validChars[] = '+';
912 0 : $validChars[] = '#';
913 0 : $validChars[] = '(';
914 0 : $validChars[] = ')';
915 0 : reset($validChars);
916 : // Jedes Zeichen in $shortname auf Vorhandensein in $validChars pruefen.
917 0 : for ($i = 0 ; $i < $nameLength ; $i++) {
918 0 : if (!in_array(substr($shortname, $i, 1), $validChars)) {
919 0 : return "Sonderzeichen verwendet";
920 : }
921 0 : }
922 : // Kurzname O.K.
923 0 : return "";
924 : }
925 : /**
926 : * Ueberprueft die Stichwörter auf gueltige Zeichen.
927 : *
928 : * @static
929 : * @access public
930 : *
931 : * @param string $keywords - Stichwörter, der geprueft werden soll.
932 : *
933 : * @return string "" - falls Stichwörter gueltig.
934 : * $errorMessage - falls ungültig.
935 : */
936 : function validateKeywords($keywords) {
937 0 : if (!(strlen($keywords) < 255)) return 'Stichwörter zu lang';
938 0 : }
939 : /**
940 : * Formatiert einen aus einem Formular uebernommenen Veranst.-Namen.
941 : *
942 : * @static
943 : * @access private
944 : *
945 : * @param string $coursename - Veranstaltungsname, der formatiert werden soll.
946 : * Der Name muss zuvor mit der Methode
947 : * CourseSettings::checkCoursename($coursename)
948 : * erfolgreich ueberprueft worden sein.
949 : *
950 : * @return string $coursename - formatierter Veranstaltungsname.
951 : */
952 : function formatName($name) {
953 0 : return trim($name);
954 : }
955 : /**
956 : * Ueberprueft einen Veranstaltungspasswort auf gueltige Zeichen.
957 : *
958 : * @static
959 : * @access public
960 : *
961 : * @param string $pass - Veranstaltungspasswort, das geprueft werden soll.
962 : *
963 : * @return string "" - falls Passwort gueltig.
964 : * $errorMessage - falls ungueltige Zeichen in Passwort enthalten.
965 : */
966 : function validateRegistrationPassword($pass) {
967 0 : $retval = Passwords::checkPasswordAdvanced($pass, true);
968 0 : if ($retval === PASSWORD_OK) return "";
969 0 : else return $retval;
970 : }
971 : /**
972 : * Ueberprueft eine Veranstaltungsinformation auf gueltige Zeichen.
973 : * Gueltige Zeichen sind alle alphabetischen Gross-und Kleinbuchstaben
974 : * und alle Zahlen, Zeilenumbrueche, sowie die folgenden Sonderzeichen :
975 : * ' ','/','Ä','Ö','Ü','ä','ö','ü','-','+','#','(',')',',','.',':','!',';','[',']','{','}','=','*'.
976 : *
977 : * @static
978 : * @access public
979 : *
980 : * @param string $pass - Veranstaltungsinformation, die geprueft werden soll.
981 : *
982 : * @return string "" - falls Information gueltig.
983 : * $errorMessage - falls ungueltige Zeichen in Information enthalten.
984 : */
985 : function validateInfo($info) {
986 0 : $infoLength = strlen($info); // Anzahl der Zeichen von $info.
987 0 : $validChars = array(); // Sub-Strings, die eine Veranstaltungsinfo enthalten darf.
988 : // alphabetische Grossbuchstaben setzen. (A..Z)
989 0 : for ($i = 65 ; $i <= 90 ; $i++) {
990 0 : $validChars[] = chr($i);
991 0 : }
992 : // alphabetische Kleinbuchstaben setzen. (a..z)
993 0 : for ($i = 97 ; $i <= 122 ; $i++) {
994 0 : $validChars[] = chr($i);
995 0 : }
996 : // Zahlen setzen. (0..9)
997 0 : for ($i = 48 ; $i <= 57 ; $i++) {
998 0 : $validChars[] = chr($i);
999 0 : }
1000 : // Auswahl an Sonderzeichen erlauben...
1001 0 : $validChars[] = ' ';
1002 0 : $validChars[] = chr(13);
1003 0 : $validChars[] = chr(10);
1004 0 : $validChars[] = '/';
1005 0 : $validChars[] = 'Ä';
1006 0 : $validChars[] = 'Ö';
1007 0 : $validChars[] = 'Ü';
1008 0 : $validChars[] = 'ä';
1009 0 : $validChars[] = 'ö';
1010 0 : $validChars[] = 'ü';
1011 0 : $validChars[] = '-';
1012 0 : $validChars[] = '+';
1013 0 : $validChars[] = '#';
1014 0 : $validChars[] = '(';
1015 0 : $validChars[] = ')';
1016 0 : $validChars[] = ',';
1017 0 : $validChars[] = '.';
1018 0 : $validChars[] = ':';
1019 0 : $validChars[] = '!';
1020 0 : $validChars[] = ';';
1021 0 : $validChars[] = '[';
1022 0 : $validChars[] = ']';
1023 0 : $validChars[] = '{';
1024 0 : $validChars[] = '}';
1025 0 : $validChars[] = '=';
1026 0 : $validChars[] = '*';
1027 0 : reset($validChars);
1028 0 : $info = nl2br($info);
1029 0 : $infoNoTags = strip_tags($info);
1030 0 : $infoNoTagsLength = strlen($infoNoTags);
1031 : // Jedes Zeichen in $info auf Vorhandensein in $validChars pruefen.
1032 0 : for ($i = 0 ; $i < $infoNoTagsLength ; $i++) {
1033 0 : if (!in_array(substr($infoNoTags, $i, 1), $validChars)) {
1034 0 : return "Sonderzeichen verwendet<br /><pre>".$infoNoTags."</pre>";
1035 : }
1036 0 : }
1037 : // Veranstaltungsinfo O.K.
1038 0 : return "";
1039 : }
1040 : /**
1041 : * Formatiert eine aus einem Formular uebernommene Veranst.-Information.
1042 : *
1043 : * @static
1044 : * @access private
1045 : *
1046 : * @param string $info - Veranstaltungsinformation, die formatiert werden soll.
1047 : * Die Information muss zuvor mit der Methode
1048 : * CourseSettings::checkCourseInfo($info)
1049 : * erfolgreich ueberprueft worden sein.
1050 : *
1051 : * @return string $info - formatierte Veranstaltungsinformation.
1052 : */
1053 : function formatInfo($info) {
1054 0 : $info = strip_tags($info);
1055 0 : $info = Data::toHTML($info, false);
1056 0 : $info = nl2br($info);
1057 0 : return $info;
1058 : }
1059 : function validateMaxStudents($maxStudents) {
1060 0 : if (strval(intval($maxStudents)) != $maxStudents) {
1061 0 : return "keine Zahl eingegeben";
1062 : }
1063 0 : if ($maxStudents < 0) {
1064 0 : return "Wert ist zu klein";
1065 : }
1066 0 : return "";
1067 : }
1068 : /**
1069 : * Ueberprueft einen eStudy Style-Namen.
1070 : *
1071 : * @static
1072 : * @access public
1073 : * @param string $style - Der zu prüfende Style-Name
1074 : * @return string "" - falls der Name gueltig ist
1075 : * $errorMessage - falls der Name ungueltig ist.
1076 : */
1077 : function validateStyle($style) {
1078 0 : if ($style == '') return "";
1079 0 : $styles = Style::getStyleTemplates();
1080 0 : foreach($styles as $styleInfo) {
1081 0 : if ($styleInfo[0] == $style) {
1082 0 : return "";
1083 : }
1084 0 : }
1085 0 : return "Style nicht vorhanden!";
1086 : }
1087 : /**
1088 : * Gibt einen Dialog fuer die Veranstaltungseinstellungen aus.
1089 : * Verwendet hierzu die Klasse 'SettingsDialog'.
1090 : *
1091 : * @access protected
1092 : * @static
1093 : *
1094 : * @param void
1095 : * @return void
1096 : */
1097 : function echoSettingsDialog() {
1098 0 : new SettingsDialog($this);
1099 0 : }
1100 : }
|